package com.unitd.frame.comm.utils;

import java.util.Random;

/**
 * @desc 随机数工具类
 * @filename RandomUtils.java
 * @copyright www.unitd.com
 * @author Hudan
 * @version 1.0
 * @date 2016/11/13
 */
public class RandomUtils extends org.apache.commons.lang3.RandomUtils {

	/**
	 * @desc 生成指定位数的数字串
	 * @param rdNumLen 需要生成的随机数长度
	 * @return 随机数字符串
	 */
	public static String genRandomNum(int rdNumLen) {
		return genRandomNum(rdNumLen, false);
	}

	/**
	 * @desc 生成指定位数的数字字母串
	 * @param rdNumLen 需要生成的随机数长度
	 * @param isLetter 是否字母
	 * @return 随机数字符串
	 */
	public static String genRandomNum(int rdNumLen, boolean isLetter) {
		if(isLetter) {
			// 生成的随机数的范围
			char[] str = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
					'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
					'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
			// 生成随机数
			return genRandomBySrc(rdNumLen, str);
		} else {
			// 生成的随机数的范围
			char[] str = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
			// 生成随机数
			return genRandomBySrc(rdNumLen, str);
		}
	}

	/**
	 * @desc 生成指定位数的数字字母随机串
	 * @param rdNumLen 需要生成的随机数长度
	 * @param str 需要生成的随机数的范围
	 * @return 随机数字符串
	 */
	private static String genRandomBySrc(int rdNumLen, char[] str) {
		int maxNum = 1000;
		int i; 							// 生成的随机数
		int count = 0; 					// 生成的长度
		StringBuilder sb = new StringBuilder("");
		Random r = new Random();
		while (count < rdNumLen) {
			// 生成随机数，取绝对值，防止生成负数，
			i = Math.abs(r.nextInt(maxNum)); // 生成的数最大为36-1
			i = i % 36;
			if (i >= 0 && i < str.length) {
				sb.append(str[i]);
				count++;
			}
		}
		return sb.toString();
	}

	/**
	 * @desc 生成指定最小和最大位数的随机字符串
	 * @param minLen 最小长度
	 * @param maxLen 最大长度
	 * @return 随机字符串
	 */
	public static String genRandomStr(int minLen, int maxLen) {
		String base = "abcdefghijklmnopqrstuvwxyz0123456789";
		Random random = new Random();
		StringBuffer sb = new StringBuffer();
		int length = random.nextInt(maxLen - minLen) + minLen;
		for (int i = 0; i < length; i++) {
			int number = random.nextInt(base.length());
			sb.append(base.charAt(number));
		}
		return sb.toString();
	}
}